home *** CD-ROM | disk | FTP | other *** search
/ Ian & Stuart's Australian Mac: Not for Sale / Another.not.for.sale (Australia).iso / fade into you / getting there / Apps / MOO-1.7.6.src / src / log.c < prev    next >
Text File  |  1994-11-02  |  4KB  |  176 lines

  1. /******************************************************************************
  2.   Copyright (c) 1992 Xerox Corporation.  All rights reserved.
  3.   Portions of this code were written by Stephen White, aka ghond.
  4.   Use and copying of this software and preparation of derivative works based
  5.   upon this software are permitted.  Any distribution of this software or
  6.   derivative works must comply with all applicable United States export
  7.   control laws.  This software is made available AS IS, and Xerox Corporation
  8.   makes no warranty about the software, its performance or its conformity to
  9.   any specification.  Any person obtaining a copy of this software is requested
  10.   to send their name and post office or electronic mail address to:
  11.     Pavel Curtis
  12.     Xerox PARC
  13.     3333 Coyote Hill Rd.
  14.     Palo Alto, CA 94304
  15.     Pavel@Xerox.Com
  16.  *****************************************************************************/
  17.  
  18. #include <errno.h>
  19. #include "my-stdarg.h"
  20. #include "my-stdio.h"
  21. #include "my-string.h"
  22. #include "my-time.h"
  23.  
  24. #include "config.h"
  25. #include "functions.h"
  26. #include "log.h"
  27. #include "options.h"
  28. #include "storage.h"
  29. #include "streams.h"
  30. #include "utils.h"
  31.  
  32. static void
  33. do_log(const char *fmt, va_list args, const char *prefix)
  34. {
  35.     time_t            now = MacTime();
  36.     char       *nowstr = ctime(&now);
  37.  
  38.     nowstr[19] = '\0';    /* kill the year and newline at the end */
  39.     fprintf(stderr, "%s: %s", nowstr + 4, prefix); /* skip the day of week */
  40.     vfprintf(stderr, fmt, args);
  41.     fflush(stderr);
  42. }
  43.  
  44. void
  45. log(const char *fmt, ...)
  46. {
  47.     va_list    args;
  48.  
  49.     va_start(args, fmt);
  50.     do_log(fmt, args, "");
  51.     va_end(args);
  52. }
  53.  
  54. void
  55. errlog(const char *fmt, ...)
  56. {
  57.     va_list    args;
  58.  
  59.     va_start(args, fmt);
  60.     do_log(fmt, args, "*** ");
  61.     va_end(args);
  62. }
  63.  
  64. void
  65. log_perror(const char *what)
  66. {
  67.     errlog("%s: %s\n", what, strerror(errno));
  68. }
  69.  
  70.  
  71. #ifdef LOG_COMMANDS
  72. static Stream    *command_history = 0;
  73. #endif
  74.  
  75. void
  76. reset_command_history()
  77. {
  78. #ifdef LOG_COMMANDS
  79.     if (command_history == 0)
  80.     command_history = new_stream(1024);
  81.     else
  82.     reset_stream(command_history);
  83. #endif
  84. }
  85.  
  86. void
  87. log_command_history()
  88. {
  89. #ifdef LOG_COMMANDS
  90.     errlog("COMMAND HISTORY:\n%s", stream_contents(command_history));
  91. #endif
  92. }
  93.  
  94. void
  95. add_command_to_history(Objid player, const char *command)
  96. {
  97. #ifdef LOG_COMMANDS
  98.     time_t            now = MacTime();
  99.     char       *nowstr = ctime(&now);
  100.  
  101.     nowstr[19] = '\0';    /* kill the year and newline at the end */
  102.     stream_printf(command_history, "%s: #%d: %s\n",
  103.           nowstr + 4,    /* skip day of week */
  104.           player, command);
  105. #endif /* LOG_COMMANDS */
  106. }
  107.  
  108. /**** built in functions ****/
  109.  
  110. static package
  111. bf_server_log(Var arglist, Byte next, void *vdata, Objid progr)
  112. {
  113.     if (!is_wizard(progr)) {
  114.     free_var(arglist);
  115.     return make_error_pack(E_PERM);
  116.     } else {
  117.     int is_error = 0;
  118.     Var ret;
  119.     ret.type = TYPE_NUM;
  120.     ret.v.num = 0;
  121.     if (arglist.v.list[0].v.num == 2)
  122.         is_error = is_true(arglist.v.list[2]);
  123.     if (is_error)
  124.         errlog("> %s\n", arglist.v.list[1].v.str);
  125.     else
  126.         log("> %s\n", arglist.v.list[1].v.str);
  127.         
  128.     free_var(arglist);
  129.     return make_var_pack(ret);
  130.     }
  131. }
  132.  
  133. void
  134. register_log(void)
  135. {
  136.     (void) register_function("server_log", 1, 2, bf_server_log,
  137.                  TYPE_STR, TYPE_ANY);
  138. }
  139.  
  140. char rcsid_log[] = "$Id: log.c,v 1.10 1992/10/23 23:03:47 pavel Exp $";
  141.  
  142. /* $Log: log.c,v $
  143.  * Revision 1.10  1992/10/23  23:03:47  pavel
  144.  * Added copyright notice.
  145.  *
  146.  * Revision 1.9  1992/10/21  03:02:35  pavel
  147.  * Converted to use new automatic configuration system.
  148.  *
  149.  * Revision 1.8  1992/09/22  22:48:15  pavel
  150.  * Added missing #include of "config.h".
  151.  *
  152.  * Revision 1.7  1992/09/08  22:04:45  pjames
  153.  * changed `register_bf_log()' to `register_log()'
  154.  *
  155.  * Revision 1.6  1992/08/20  17:27:13  pavel
  156.  * Added the prefix `> ' to all log messages generated by the server_log()
  157.  * built-in function, so that they can be distinguished from server-generated
  158.  * messages.
  159.  *
  160.  * Revision 1.5  1992/08/14  00:23:37  pavel
  161.  * Commented text after #endif.
  162.  *
  163.  * Revision 1.4  1992/08/11  17:27:58  pjames
  164.  * Changed server_log to return 0 instead of 1.
  165.  *
  166.  * Revision 1.3  1992/08/10  17:14:00  pjames
  167.  * Updated #includes.  Added bf_server_log to write messages to server
  168.  * log output.   Added registration procedure.
  169.  *
  170.  * Revision 1.2  1992/07/21  00:04:15  pavel
  171.  * Added rcsid_<filename-root> declaration to hold the RCS ident. string.
  172.  *
  173.  * Revision 1.1  1992/07/20  23:23:12  pavel
  174.  * Initial RCS-controlled version.
  175.  */
  176.